package com.zzz.offer.reverseInt;

class Solution {
    public static void main(String[] args) {
        System.out.println(new Solution().reverse(0));
    }

    public int reverse(int x) {
        boolean isNeg;

        isNeg = x < 0;
        x = isNeg ? -x : x;

        StringBuilder builder = new StringBuilder(String.valueOf(x));
        builder.reverse();

        String result = builder.toString();
        while (result.startsWith("0") && !result.equals("0")) {
            result = result.substring(1);
        }

        try {
            x = Integer.parseInt(result);
        } catch (NumberFormatException e) {
            return 0;
        }

        return isNeg ? -x : x;
    }

    /**
     * 方法巧妙之处在于判断最大最小值，如果x不等于0 那么就判断x 与最大值和最小值 除以10 来比较 ，毕竟如果x有值那么一定是 会将结果 乘以10
     *  而且根本不用判断数字是正还是负，因为 负数 的  取模 和 除法都是为负数
     * @param x 输入参数
     * @return
     */
    public int reverse2(int x) {
        int result = 0;
        while (x != 0) {
            if (result < Integer.MIN_VALUE / 10 || result > Integer.MAX_VALUE / 10) {
                return 0;
            }
            result = result * 10 + x % 10;
            x /= 10;
        }
        return result;
    }
}
